#pragma once
#include <unistd.h>
#include <stdio.h>
#include <map>
#include <unordered_map>
#include "rpcRequestInfo.h"
#include <stdint.h>
#include <atomic>
namespace TinyRPC{

class MessageManager{

public:
    MessageManager();
    uint32_t getGlobalMessageId();

    void set(uint32_t no, RPCRequestInfoPtr info){
        m_requestInfos[no] = info;
    }
    void deleteRequestInfoPtr(uint32_t no){
        m_requestInfos.erase(no);
    }
    
    RPCRequestInfoPtr getRequestInfo(uint32_t no){
        return m_requestInfos[no];
    }

    RPCRequestInfoPtr& operator[](uint32_t msg_no){
        return m_requestInfos[msg_no];
    }

private:
    std::atomic<uint32_t> m_globalMessageId;                     // 序列号
    // 记录所有的rpc request
    std::unordered_map<uint32_t, RPCRequestInfoPtr> m_requestInfos;

};


}